<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
     // promise
     // resolve 一旦执行会将p1的状态由pending变为fulfilled
     // const p1 = new Promise(function(resolve,reject){
     //     // 异步行为
     //     setTimeout(()=>{
     //         // resolve();// 状态：fulfilled   值：undefined
     //         // resolve(1);// 状态：fulfilled   值：1
     //         // reject(2);// 状态：rejected   值：2
     //         // console.log(111111);
     //         // throw new Error("1");
     //         // throw 1;
     //
     //     })
     // })
     // console.log(p1);
     // p1.then(value=>{
     //     // 成功回调函数：处理成功行为  values成功值
     //     console.log("成功",value);
     // },reason=>{
     //     // 失败回调函数：处理失败行为 reason失败值
     //     console.log("失败",reason);
     // })


     // then的返回值？
     // 中断promise链
     // 异常穿透。

     const p1 = new Promise(function(resolve){
         setTimeout(()=>resolve(100));
     })
     // 1- then函数返回的是promise
     // 2- 返回promise的值受成功或失败回调函数的返回值的影响。
     //     2-1: 如果成功或失败回调函数返回的是非promise,
     //         那么then返回的promise状态为成功，值为成功或失败回调函数的返回值
     //     2-2:如果成功或失败回调函数返回的是promise,
     //         那么then返回的promise状态以及值与该成功或失败回调函数返回的promise的状态以及值相同。
     //     2-3:如果成功或失败回调函数有异常,
     //         那么then返回的promise状态为失败，值为异常信息
     // const p2 = p1.then(function(values){
     //     console.log(1)
     // })
     // console.log(p2);// fulfilled  undefined

     // const p2 = p1.then(function(values){
     //     return 1;
     // })
     // console.log(p2);// fulfilled  1

     // const p2 = p1.then(function(values){
     //     return {a:1};
     // })
     // console.log(p2);// fulfilled  {}

     // const p2 = p1.then(function(values){
     //     return Promise.resolve(100);
     // })
     // console.log(p2);// fulfilled


     // const p2 = p1.then(function(values){
     //     return Promise.reject(100);
     // })
     // console.log(p2);// rejected  100


     // const p2 = p1.then(function(values){
     //     throw "异常"
     //     return Promise.reject(100);
     // })
     // console.log(p2);// rejected  异常


     {
         // const p3 = new Promise((resolve,reject)=>{
         //     setTimeout(()=>{
         //         reject(90);
         //     })
         // })
         // const p4 = p3.then(value=>{
         //     return 1;
         // },reason=>{
         //     return 2;
         // })
         // console.log(p4);// 成功  2
     }

     {
         // 如果省略失败回调，那么失败回调相当于写的是 reason=>{throw reason}
         // const p3 = new Promise((resolve,reject)=>{
         //     setTimeout(()=>{
         //         reject(90);
         //     })
         // })
         // const p4 = p3.then(value=>{
         //     return 1;
         // },reason=>{
         //     throw reason;
         // })
         // console.log(p4);//
     }
     {
         // 省略了成功回调,成功回调相当于：value=>value
         // const p3 = new Promise((resolve,reject)=>{
         //     setTimeout(()=>{
         //         resolve(90);
         //     })
         // })
         // const p4 = p3.then(value=>value)
         // console.log(p4);//
     }
     {
         // const p1 = new Promise((resolve,reject)=>{
         //     resolve(1);
         // })
         // // 成功，2
         // const p2 = p1.then(value=>{
         //     return value+1;
         // })
         // // 成功，102
         // const p3 = p2.then(value=>{
         //     return value+100
         // })
         // // 成功：52
         // const p4 = p3.then(value=>{
         //     return value-50;
         // })
         //
         // p4.then(value=>{
         //     console.log(value);// 52
         // })
     }
     {
         // const p1 = new Promise((resolve,reject)=>{
         //     reject(1);
         // })
         // 处理失败状态下的promise
         // p1.then(undefined,reason=>{
         //     console.log(1+reason);// 2
         // })

         // p1.catch(reason=>{
         //     console.log(reason);// 1
         // })

         // p1.then(value=>{
         //     console.log("成功",value);
         // },reason=>{
         //     console.log("失败",reason);
         // }).catch(reason=>{
         //     console.log("catch",reason);
         // })
     }
     {
         new Promise((resolve,reject)=>{
             resolve(1);
         }).then(value=>{
             // return Promise.reject(20);
             return new Promise(()=>{})
         }).then(value=>{
             return value+100
         }).then(value=>{
             return value-50;
         }).then(value=>{
             console.log(value);
         }).catch(reason=>{
             console.log(reason);// 20
         })
     }











</script>
</html>